(function () {
  /**
   * @Description 弹出提示框方法ownAlert
   * @param text（需要提示的内容）val1（确定按钮）val2（取消按钮）
   * callback1（按钮1的回调方法）callback2(按钮2的回调方法）
   */
  $.ownAlert = function (text, val1, val2, callback1, callback2) {
    // 加载弹框
    var str =
      '<div class="own_alert_div">' +
      '<div class="own_alert_cover"></div>' +
      '<div class="own_alert_con">' +
      '<div class="own_alert_title">提示</div>' +
      '<p>' +
      text +
      '</p>' +
      '<div class="own_alert_btn">' +
      '<input type="button" class="own_alert_btn_sure" value="确 定" />' +
      '<input type="button" class="own_alert_btn_cancel" value="取 消" />' +
      '</div>' +
      '</div>' +
      '</div>';
    $('body').append(str);
    // 判断是否有第一个按钮
    if (val1 === null || val1 === undefined) {
      $('.own_alert_div .own_alert_btn_sure').hide();
    } else {
      $('.own_alert_div .own_alert_btn_sure').val(val1);
    }
    // 是否有第二个按钮
    if (val2 === null || val2 === undefined) {
      $('.own_alert_div .own_alert_btn_cancel').hide();
    } else {
      $('.own_alert_div .own_alert_btn_cancel').val(val2);
    }
    // 按钮val1 的回调方法
    $('.own_alert_div .own_alert_btn_sure').click(function () {
      $('.own_alert_div').remove();
      if (callback1 && typeof callback1 === 'function') {
        callback1();
      }
    });
    // 按钮val2 的回调方法
    $('.own_alert_div .own_alert_btn_cancel').click(function () {
      $('.own_alert_div').remove();
      if (callback2 && typeof callback2 === 'function') {
        callback2();
      }
    });
  };

  /**
   * @description ownAlert 重构
   * @param {String} str 提示内容，若只有str则1500ms后消失
   * @param {String} obj1 按钮文案，当为string时，只有一个按钮
   * @param {Function} obj2 回调函数，obj2位回调函数，
   * @param {Array} obj1 多个按钮对象
   * @param {String} obj1.text 多个按钮的文案
   * @param {Function} obj1.cb 按钮对应的回调函数
   */
  var layerMsg = function (str, obj1, obj2) {
    if (!str || typeof str !== 'string') return;
    // 加载弹框
    var htmlStr =
      '<div class="own_alert_div">' +
      '<div class="own_alert_cover"></div>' +
      '<div class="own_alert_con">' +
      '<div class="own_alert_title">提示</div>' +
      '<p>' +
      str +
      '</p>' +
      '<div class="own_alert_btn">' +
      '</div>' +
      '</div>' +
      '</div>';
    $('body').append(htmlStr);
    var btnStr = '<input type="button" class="own_alert_btn_sure" />';
    var $msg = $('.own_alert_div');
    var cbList = [];
    if (typeof obj1 === 'string') {
      cbList.push({
        text: obj1,
        cb: obj2
      });
    } else if (typeof obj1 === 'object' && obj1 instanceof Array) {
      cbList = obj1;
    } else {
      setTimeout(function () {
        $msg.remove();
      }, 1500);
      return;
    }
    for (var i = 0; i < cbList.length; i++) {
      var cur = cbList[i];
      if (cur.text) {
        var $ele = $(btnStr).val(cur.text);
        $msg.find('.own_alert_btn').append($ele);
      }
    }
    $msg.find('.own_alert_btn').click(function (e) {
      var $btn = $(e.target);
      var index = 0;
      var fn;
      if ($btn.attr('type') === 'button') {
        index = $btn.index();
        $msg.remove();
        fn = cbList[index].cb;
        if (fn && typeof fn === 'function') {
          fn.call($btn);
        }
      }
    });
  };

  // 配置提示组件，风格建议使用类似浏览器原生alert
  var alertMsg = $.ownAlert || alert;
  // 开发错误提示，使用window.console，即便使用typeof console在IE下也会报错
  var error = (window.console && window.console.error) || alert;
  /**
   * 基于jqueryPromise 的ajax异步封装
   * @param {object} options 同ajax，
   * 若options为string，则参数会被当成get请求的url
   * @return {promise} promise 对象
   */
  function fetch(options) {
    var deferred = new $.Deferred();
    var opts = null;
    if (typeof options === 'string') {
      opts = {
        url: options
      };
    } else {
      opts = options;
    }
    var ajaxType = opts.type ? opts.type.toLowerCase() : 'get';

    if (
      (ajaxType === 'post' || ajaxType === 'put') &&
      typeof opts.data === 'object'
    ) {
      opts.data = JSON.stringify(opts.data);
    }
    // success: a:data,b:msg,c:jqueryStateObj
    // fail: a:jqueryStateObj ,b:code, c:msg
    $.ajax(opts)
      .done(function (res, msg, obj) {
        var unknowErrorMsg = '未知错误请稍后再试';
        var _res = {};
        try {
          _res = typeof res === 'object' ? res : JSON.parse(res);
        } catch (err) {
          _res.returnMsg = unknowErrorMsg;
        }
        var code = parseInt(_res.returnCode, 10);
        if (code === -1 || code === -9 || code === -10 || code === -11) {
          alertMsg(_res.returnMsg, '确定');
          deferred.reject(_res, msg, obj);
        } else if (code === -2) {
          alertMsg(_res.returnMsg, '确定', undefined, function () {
            window.location.href = '../knLogin.html';
            // window.location.href = conf.urlPrefix + '/error.html?code=4';
          });
          deferred.reject(_res, msg, obj);
        } else if (code === 1) {
          // 只有接口调用成功，并且返回的returnCode为1的情况下，才执行后续的成功操作
          deferred.resolve(_res, msg, obj);
        } else {
          alertMsg(unknowErrorMsg, '确定');
          deferred.reject(_res, msg, obj);
        }
      })
      .fail(function (obj, code, msg) {
        alertMsg('服务器开小差，请稍后再试', '确定');
        deferred.reject(obj, code, msg);
      });

    return deferred.promise();
  }
  /**
   * 序列化参数为get查询字符擦混
   * @param {Object} obj plainObj 参数对象
   * @return {String} str 序列化的对象
   */
  function serialize(obj) {
    var str = '';
    for (var i in obj) {
      if (obj.hasOwnProperty(i)) {
        str += '&' + i + '=' + encodeURI(obj[i]);
      }
    }
    return str.substring(str.indexOf('&') + 1);
  }

  /**
   * 时间补零
   * @param {Number|String} str 需要处理的字符
   */
  function fixTimeZero(str) {
    var _str = str.toString();
    return _str.length > 1 ? _str : '0' + _str;
  }

  /**
   *  获取url上的参数 url+"?name=value&name2=value"
   *  返回值为 object {name:value,name2:value},值为字符串
   */
  function paramObj() {
    if (window.location.search.indexOf('?') !== -1) {
      var cs = window.location.search.split('?')[1].split('&');
      var str = '{';
      for (var i = 0; i < cs.length; i++) {
        var obj = cs[i].split('=');
        if (i === cs.length - 1) {
          str = str + '"' + obj[0] + '"' + ':' + '"' + decodeURI(obj[1]) + '"}';
        } else {
          str = str + '"' + obj[0] + '"' + ':' + '"' + decodeURI(obj[1]) + '",';
        }
      }
      var csobj = JSON.parse(str);
      return csobj;
    }
    return '';
  }

  /**
   * base64 转成图片
   * @param {String} url url
   */
  function base64(url) {
    var fileExtendName = url.split('.')[1];
    return 'data:image/' + fileExtendName + ';base64,';
  }
  /**
   * 字符串替换
   * @param {String} str
   * @return {String}
   * @desc 要替换的字符串
   */
  function replaceBlank(str) {
    if (str) {
      return str
        .split('\n')
        .join('<br>')
        .replace(/\s/g, '&nbsp;');
    }
  }
  /**
   * 生成关于路由对照表的跳转，
   * 路由表依据的为className
   * var CONF_ROUTER = {
  		approve: './approve.html',
  		recommend: './recommend.html',
  		project: '../project.html'
  	};
   * @param {object} obj 路由对照表
   * @return {function} fn
   */
  function initGoNewWindow(obj) {
    /**
     * window.open 弹出新页面，
     * 通过className ---> url一一对应
     * @param {JqueryElement} $ele jquery对象
     * @param {Object} query url的查询字符串
     */
    function goNewWindow($ele, query) {
      var url = '';
      for (var i in obj) {
        if ($ele.hasClass(i)) {
          url = obj[i];
        }
      }
      return window.open(url + objToQuery(query), '', $.newWindowFeature);
    }
    return goNewWindow;
  }

  /**
   * 使用window.open方法打开页面关闭时，重新刷新本页面
   * @param {Window} win 新开窗口的window对象
   */
  function reloadOnClose(win) {
    if (!win) return;
    var now = new Date().getTime();
    $(win).on('unload', function () {
      if (new Date().getTime() - now > 500) {
        window.location.reload(true);
      }
    });
  }
  /**
   * 把对象转换为查询字符串
   * @param {Object} obj 要转换的对象，对象是扁平的
   */
  function objToQuery(obj) {
    if (typeof obj !== 'object') return '';
    var str = '?';
    for (var i in obj) {
      str += i + '=' + obj[i] + '&';
    }
    return str.substr(0, str.length - 1);
  }
  /**
   * 基于artTemplate的异步渲染，在fetch上的封装
   * @param {Object} obj 选项对象，为ajax选项加上一下模板选项
   * @param {Sting} obj.tem artTemplate模板选择器的地址，或者直接是字符串
   * @param {String} obj.pos 要渲染的data层级，例如returnData
   * @param {String} obj.wrap 模板渲染位置，默认为tem的父元素
   * @param {Function} obj.prefix 接口数据预处理，对data继续处理，
   * 传入的参数为异步请求的data，this为渲染wrap的jquery对象，
   * prefix函数的返回值将被用于模板引擎的渲染，其次就是obj.pos指定的对象
   * 若两种都不满足，则不渲染，可以在返回的jqueryPromise.done(function (result){...})
   * 进行渲染，renderFn为缓存在$(obj.wrap).data('render')里
   * 在prefix 阶段模板还未渲染成功，需要在返回的promise.done() 为完成后；
   * @return {jqueryPromise} 返回jqueryPromise
   */
  function asyncRender(obj) {
    if (!obj.tem) return error('tem 模板选择器参数不存在');
    // 依赖artTemplate的template
    var $temEle = $(obj.tem);
    var $wrap = obj.wrap ? $(obj.wrap) : $temEle.parent();
    var renderFn = null;
    if (!$wrap.data('renderFn')) {
      if ($temEle.length > 0) {
        renderFn = template.compile($temEle.html());
        $temEle.remove();
        $wrap.data('renderFn', renderFn);
      } else {
        renderFn = template.compile(obj.tem);
      }
    } else {
      renderFn = $wrap.data('renderFn');
    }
    var realRenderData = null;
    var fetchPromise = fetch(obj)
      .done(function (data) {
        if (typeof obj.prefix === 'function') {
          realRenderData = obj.prefix.call($wrap, data);
        }
      })
      .done(function (data) {
        if (realRenderData) {
          $wrap.html(
            renderFn({
              data: realRenderData
            })
          );
        } else if (obj.pos) {
          $wrap.html(
            renderFn({
              data: dataQueue(data, obj.pos)
            })
          );
        }
      });
    return fetchPromise;
  }

  /**
   * 根据层级关系获取对象中的内容
   * @param {Object} data 数据对象
   * @param {String} str 层级关系
   */
  function dataQueue(data, str) {
    var arr = str.split('.');
    var res = data;
    for (var i = 0, len = arr.length; i < len; i++) {
      if (typeof res === 'object') {
        res = res[arr[i]];
      }
    }
    return res;
  }

  /**
   * 对input[file]元素进行克隆，解决change时无法再次上传的问题
   * @param {jQuery} $ele 待克隆的DOM元素（input[file]）
   */
  function uploadEleCopy($ele) {
    var $eleClone = $ele.clone();
    $eleClone.val('');
    $ele.after($eleClone).remove();
  }
  /**
   * 异步渲染代码表，不需要参数
   * @param {String|}  $url 请求地址
   * @param {String|Object}  $ele jqueryDOM对象或者jquery选择器
   * @param {String|Array} name 表名多个用逗号隔开 ， 参数为数组第一个是表明，第二个是dmid
   * @param {String} table_name 表名返回值
   * @param {String} val 默认选中值
   */
  function checkCode($url, $ele, table_name, val) {
    var $el;
    if ($ele instanceof $) {
      $el = $ele;
    } else if (typeof $ele === 'string') {
      $el = $($ele);
    }
    return fetch({
      url: $url,
      type: 'get'
    }).done(function (result) {
      var data = result.returnData;
      if (+data.executeResult === 1) {
        var codeList = data[table_name];
        var str = '';
        codeList.unshift({
          dmid: '',
          dmmc: '请选择',
          xl: []
        });
        for (var i = 0, len = codeList.length; i < len; i++) {
          var current = codeList[i];
          if (current.dmid == val) {
            str +=
              '<option selected="selected" value="' + current.dmid + '"title="' + current.dmmc + '">' +
              current.dmmc +
              '</option>';
          } else {
            str +=
              '<option value="' + current.dmid + '"title="' + current.dmmc + '">' +
              current.dmmc +
              '</option>';
          }
        }
        $el.html(str);
      } else {
        error('异步获取代码表失败');
      }
    });
  }
  /**
   * 异步渲染代码表，对应于select元素
   * @param {String|}  $url 请求地址
   * @param {String|Object}  $ele jqueryDOM对象或者jquery选择器
   * @param {String|Array} name 表名多个用逗号隔开 ， 参数为数组第一个是表明，第二个是dmid
   * @param {String} table_name 表名返回值
   * @param {String} val 默认选中值
   * @param {Boolean} flag flag为true时渲染列表不含有空值
   */
  function renderCode($url, $ele, name, table_name, val, flag) {
    var $el, tabname, dmid;
    if ($ele instanceof $) {
      $el = $ele;
    } else if (typeof $ele === 'string') {
      $el = $($ele);
    }
    if (typeof name == 'string') {
      tabname = name;
    } else if (name instanceof Array) {
      tabname = name[0];
      dmid = name[1];
    }
    return fetch({
      url: $url,
      type: 'get',
      data: {
        table_name: tabname,
        dmid: dmid
      }
    }).done(function (result) {
      var data = result.returnData;
      if (+data.executeResult === 1) {
        var codeList = [];
        // codeList = data['dmblb'] && data['dmblb'][table_name];
        if (data['dmblb'] instanceof Array) {
          var codeList = data['dmblb']
        } else {
          codeList = data['dmblb'][table_name];
        }
        var str = '';
        !flag &&
          codeList.unshift({
            dmid: '',
            dmmc: '请选择',
            xl: []
          });
        for (var i = 0, len = codeList.length; i < len; i++) {
          var current = codeList[i];

          if (current.dmid == val) {
            str +=
              '<option selected="selected" value="' + current.dmid + '"title="' + current.dmmc + '">' +
              current.dmmc +
              '</option>';
          } else {
            str +=
              '<option value="' + current.dmid + '"title="' + current.dmmc + '">' +
              current.dmmc +
              '</option>';
          }
        }
        $el.html(str);
      } else {
        error('异步获取代码表失败');
      }
    });
  }
  /**
   * 根据 id 请求代码表 获取 值为 gwmc gwbh
   * @param {String|}  $url 请求地址
   * @param {String|Object}  $ele jqueryDOM对象或者jquery选择器
   * @param {String|Array} name 表名多个用逗号隔开 ， 参数为数组第一个是表明，第二个是dmid
   * @param {String} table_name 表名返回值
   * @param {String} val 默认选中值
   * @param {Boolean} flag flag为true时渲染列表不含有空值
   *
   *  */
  function checkCodeGwList($url, $ele, table_name, val, flag) {
    var $el, name, id;
    if ($ele instanceof $) {
      $el = $ele;
    } else if (typeof $ele === 'string') {
      $el = $($ele);
    }
    if (typeof table_name == 'string') {
      name = table_name;
    } else if (table_name instanceof Array) {
      name = table_name[0];
      id = table_name[1];
    }
    return fetch({
      url: $url,
      type: 'get',
      data: {
        gwbh: id
      }
    }).done(function (result) {
      var data = result.returnData;
      if (+data.executeResult === 1) {

        var codeList = data[name];
        var _str = '';
        !flag && codeList.unshift({
          gwbh: '',
          gwmc: '请选择'
        });
        for (var i = 0, len = codeList.length; i < len; i++) {
          var current = codeList[i];
          if (current.gwbh == val) {
            _str +=
              '<option selected="selected" value="' + current.gwbh + '"title="' + current.gwmc + '">' +
              current.gwmc +
              '</option>';
          } else {
            _str +=
              '<option value="' + current.gwbh + '"title="' + current.gwmc + '">' +
              current.gwmc +
              '</option>';
          }
        }
        $el.html(_str);
      } else {
        error('异步获取代码表失败');
      }
    });
  }
  /**
   * 新建Loading实例
   * @param {Object} obj 配置对象
   * @param {String} obj.text 提示文字
   * @return {Object} this.text 提示文字, this.$ele loading元素
   */
  function Loading(obj) {
    var opt = obj ? obj : {};
    this.text = opt.text || '加载中...';
    var $loading = $('.J_loading_com');
    if ($loading.length === 0) {
      var str =
        '<div class="loading J_loading_com">' +
        '<div class="wrapper"></div>' +
        '<div class="content">' +
        // '<img src="./styles/loading.gif" alt="" class="img">' +
        '<p class="text">' +
        this.text +
        '</p>' +
        '</div>' +
        '</div>';
      var ele = $(str);
      var img = new Image();
      img.src = './styles/loading.gif';
      ele.hide();
      ele.find('.content').prepend($(img));
      this.$ele = ele;
      $('body').append(ele);
    } else {
      this.$ele = $loading;
    }
  }
  // loading 开启
  /**
   * loading and 禁用按钮
   * @param {DOM|jQueryDOM} ele 传入的DOM对象或者jQueryDOM对象
   */
  Loading.prototype.on = function (element) {
    var $ele = this.$ele;
    if (element instanceof $) {
      this.btnElement = element;
      element.prop('disabled', true).blur();
    } else if (typeof element === 'object') {
      this.btnElement = element;
      element.disabled = true;
      $(element).blur();
    }
    $ele.find('.text').text(this.text);
    $ele.fadeIn(100);
  };

  // loading 关闭
  /**
   * loading 关闭
   * @param {DOM|jQueryDOM} ele 传入的DOM对象或者jQueryDOM对象
   */
  Loading.prototype.off = function (element) {
    if (element instanceof $) {
      element.prop('disabled', false);
    } else if (typeof element === 'object') {
      element.disabled = false;
    } else if (this.btnElement instanceof $) {
      this.btnElement.prop('disabled', false);
    } else if (typeof this.btnElement === 'object') {
      this.btnElement.disabled = false;
    }
    if (typeof element === 'object') {
      element.disabled = false;
    }
    this.$ele.fadeOut(90);
  };
  //  封装好的storage可以传任何类型 不限于字符串
  function sessionSetItem(name, param) {
    var param = JSON.stringify(param);
    sessionStorage.setItem(name, param);
  }

  function sessionGetItem(name) {
    var param = sessionStorage.getItem(name);
    if (param != "") {
      param = jQuery.parseJSON(param);
    } else {
      param = null;
    }
    return param;
  }

  function deepClone(obj) {
    var objClone = Array.isArray(obj) ? [] : {};
    if (obj && typeof obj === "object") {
      for (var key in obj) {
        if (obj.hasOwnProperty(key)) {
          //判断ojb子元素是否为对象，如果是，递归复制
          if (obj[key] && typeof obj[key] === "object") {
            objClone[key] = deepClone(obj[key]);
          } else {
            //如果不是，简单复制
            objClone[key] = obj[key];
          }
        }
      }
    }
    return objClone;
  }

  function showPlaceholder() {
    var targetObj = $('input[jr_placeholder]');
    targetObj.each(function (k, v) {
      var _id = $(v).attr('id');
      var _placeholder = $(v).attr('jr_placeholder');
      $(v).before('<label for="' + _id + '" class="holders">' + _placeholder + '</label>');
      $(v).val() && $('label[for=' + _id + ']').hide();
    })
    $(document).on('focus', 'input[jr_placeholder]', function () {
      var _id = $(this).attr('id');
      $('label[for=' + _id + ']').hide();
    })
    $(document).on('blur', 'input[jr_placeholder]', function () {
      var _id = $(this).attr('id');
      !$(this).val() && $('label[for=' + _id + ']').show();
    })
  }

  /* 设置页面区域的高度 */
  function setMainHeight() {
    var winH = $(window).outerHeight();
    var headerH = $('.head').outerHeight();
    var footerH = $('.rsj_foot_box').outerHeight();
    var linkheader_boxH = $(".linkheader_box").outerHeight();
    var result = winH - headerH - footerH-linkheader_boxH;
    $('.message').css('minHeight', Math.max(result, 514));
  }
  setMainHeight();
  $(window).on('resize', function (e) {
    setMainHeight();
  });

  function obj_extend(target, source) {
    for (var obj in source) {
      target[obj] = source[obj];
    }
    return target;
  }

  // 扩展到$上
  $.extend({
    checkCodeGwList: checkCodeGwList,
    obj_extend: obj_extend,
    showPlaceholder: showPlaceholder,
    deepClone: deepClone,
    sessionSetItem: sessionSetItem,
    sessionGetItem: sessionGetItem,
    fetch: fetch,
    paramObj: paramObj,
    serialize: serialize,
    fixTimeZero: fixTimeZero,
    layerMsg: layerMsg,
    base64: base64,
    asyncRender: asyncRender,
    checkCode: checkCode,
    replaceBlank: replaceBlank,
    initGoNewWindow: initGoNewWindow,
    reloadOnClose: reloadOnClose,
    renderCode: renderCode,
    Loading: Loading,
    newWindowFeature: 'menubar=no, location=no, menubar=no, top=0, width=1000, resizable=yes,titlebar=no,toolbar=no,scrollbars=yes,  status=no'
  });

  // 异步上传接口封装
  $.fn.extend({
    /**
     * @desc  action 上传的接口，默认为：/common/wjsc/wjsc/fileUpload'，也可以通过两种方式配置
     * 1、input的action属性
     * 2、通过$.config.upload配置
     * input 元素 obj.mode > mode属性必填（为上传的服务器的路径，询问后台）
     * 3、优先级 obj.action > input[action] > $.config.upload > default
     * @param {Object} obj 包含成功和失败的回调函数
     * @param {Function} obj.error 失败的回调函数
     * @param {Function} obj.success 成功的回调函数
     * @param {String} obj.mode mode参数
     * @param {String} obj.action 接口地址
     * @return {}
     */
    upload: function (obj) {
      var ele = this[0],
        $ele = this;
      // 判断调用元素
      if (ele.nodeName.toLowerCase() !== 'input' || ele.type !== 'file') {
        return alert('upload上传方法使用错误；请对input[type=file]的元素使用');
      }
      // 使用的变量
      var CONFIG_UPLOAD = $.config ? $.config.upload : '';
      var action =
        obj.action ||
        $ele.attr('action') ||
        CONFIG_UPLOAD ||
        conf.urlPrefix + '/wjsc/wjsc';
      var mode = obj.mode || $ele.attr('mode');
      var jsonErrorMsg = '返回值json解析错误，请处理好后台的返回值';
      // IE 10+ 使用formData方式上传
      if (window.FormData) {
        var formData = new FormData();
        formData.append('file', ele.files[0]);
        formData.append('mode', mode);
        var xhr = new XMLHttpRequest();
        xhr.open('POST', action);
        xhr.onload = function (e) {
          // 请求成功
          if (xhr.status === 200 && xhr.readyState === 4) {
            var result = xhr.response;
            var json;
            try {
              json = JSON.parse(result);
            } catch (event) {
              json = {
                result: result,
                msg: jsonErrorMsg,
                error: true
              };
            }
            if (typeof obj.success === 'function' && !json.error) {
              // if (json.returnData.executeResult === '0') {
              // 	$.ownAlert(json.returnData.message, '确定');
              // } else {
              // 	obj.success.call(ele, json);
              // }
              obj.success.call(ele, json);
            } else if (typeof obj.error === 'function') {
              obj.error.call(ele, result);
            }
          } else if (typeof obj.error === 'function') {
            obj.error.call(ele, xhr);
          }
          uploadEleCopy($ele);
        };
        xhr.send(formData);
        // IE8 9 使用form表单提交的方式上传
      } else {
        // 初始化form和iframe元素，并进行配置
        var form = $(
          '<form method="POST" enctype="multipart/form-data"></form>'
        );
        var num = Math.random() * 10e9;
        var iframe = $(
          '<iframe frameborder="0" name="' +
          num +
          '" style="display: none"></iframe>'
        );
        form.attr('action', action).attr('target', num);
        $ele.wrap(form);
        $ele.after('<input type="hidden" value="' + mode + '" name="mode">');
        iframe.appendTo($('body'));
        // 提交表单
        $ele.attr('name', 'file');
        $ele.parent().submit();
        // 处理返回事件
        iframe.on('load', function (e) {
          $ele
            .parent()
            .after($ele)
            .remove();

          var json, result;
          try {
            result = this.contentDocument.body.innerText;
          } catch (event) {
            result = '{"error":true}';
          }

          $(iframe).remove();
          try {
            json = JSON.parse(result);
          } catch (event) {
            json = {
              result: result,
              msg: jsonErrorMsg,
              error: true
            };
          }

          if (typeof obj.success === 'function' && !json.error) {
            // if (json.returnData.executeResult === '0') {
            // 	$.ownAlert(json.returnData.message, '确定');
            // } else {
            // 	obj.success.call(ele, json);
            // }
            obj.success.call(ele, json);
          } else if (typeof obj.error === 'function') {
            obj.error.call(ele, result);
          }
          uploadEleCopy($ele);
        });
      }
    },
    // 获取参数方法(可获取input和自己写的select下拉框的值)
    getFormData: function () {
      var returnData = {};
      var falgObj = {};
      $(this)
        .find('[paramete]')
        .each(function (index, element) {
          var paramAttr = $(this)
            .attr('paramete')
            .split(',');
          for (var i = 0; i < paramAttr.length; i++) {
            if ($(this).is('select')) {
              if (i === 0) {
                if (!falgObj[paramAttr[i]]) {
                  returnData[paramAttr[i]] =
                    $(this).attr('data') || $(this).val();
                }
              } else {
                returnData[paramAttr[i]] = $(this).attr(paramAttr[i]);
              }
            } else if (
              $(this).prop('type') === 'text' ||
              $(this).is('textarea')
            ) {
              if (i === 0) {
                returnData[paramAttr[i]] = $(this).val();
                if ($(this).val() === $(this).attr('placeholder')) {
                  returnData[paramAttr[i]] = '';
                }
              } else {
                returnData[paramAttr[i]] = $(this).attr(paramAttr[i]);
              }
            } else if (!falgObj[paramAttr[i]]) {
              returnData[paramAttr[i]] = $(this).attr(paramAttr[i]);
            }
            falgObj[paramAttr[i]] = true;
          }
        });
      return returnData;
    }
  });
  // 登出接口
  $.logout = function () {
    window.location.href = conf.urlPrefix + '/logout';
  };
  $(document).on('click', '.exit', function () {
    $.logout();
  });
  // 用户定制中心点击事件
  $(document).on('click', '.usercenter', function () {
    window.location.href = conf.urlYHDZZX;
  });

  /*
   *  将多级联动的数据放到localstorage里
   *  包括 行政区划、职位、行业、专业
   */
  var xzqh = {};
  $.setLinkageLocl = function () {
    var returnResult = {};
    if (JSON.stringify(xzqh) !== '{}') {
      returnResult = xzqh;
    } else {
      returnResult = ajaxRun('./common/dwhy.json');
      xzqh = returnResult;
    }
    return returnResult;
  };
  $.setLinkageLocl_get = function () {
    var returnResult = {};
    // if (JSON.stringify(xzqh) !== '{}') {
    //   returnResult = xzqh;
    // } else {
    var formXzqh = {
      table_name: 'cdg_regioncode'
    };
    returnResult = ajaxRun('./common/xzqh.json', formXzqh);
    xzqh = returnResult;
    // }
    return returnResult;
  };
  // 联动请求方法，url请求地址，
  // localClass，存localstroage里的名字
  function ajaxRun(url, formXzqh) {
    var resultData = '';
    $.ajax({
      url: url,
      type: 'get',
      data: formXzqh,
      async: false,
      success: function (result) {
        resultData = result.returnData;
      }
    });
    return resultData.xzqhlb;
  }
  //兼容ie的 数组indexOf
  if (!Array.prototype.indexOf) {
    Array.prototype.indexOf = function (obj, start) {
      for (var index = (start || 0), j = this.length; index < j; index++) {
        if (this[index] === obj) {
          return index;
        }
      }
      return -1;
    }
  }
  // 兼容ie的isArray
  if (!Array.isArray) {
    Array.isArray = function (arg) {
      return Object.prototype.toString.call(arg) === '[object Array]';
    };
  }
  // 业务公共代码
  function getUserInfo() {
    //基本信息
    $.fetch({
      url: '/dwgl/dwxxCx'
    }).done(
      function (res) {
        var data = res.returnData;
        if (data.executeResult === '1') {
          var _dwxx = data.dwxx;
          $('.mc').text(_dwxx.dwmc);
          $('.qymcInfo').text(_dwxx.dwmc).attr('title', _dwxx.dwmc);
          $('.xydmInfo').text(_dwxx.zjhm).attr('title', _dwxx.zjhm);
          $('.lxrInfo').text(_dwxx.dwjbr).attr('title', _dwxx.dwjbr);
          $('.djztInfo').text(_dwxx.dwztmc).attr('title', _dwxx.dwztmc);
          $('.djsjInfo').text(_dwxx.djsj).attr('title', _dwxx.djsj);
          $('.sfgqInfo').text(_dwxx.sfgq && _dwxx.sfgq == 1 ? '是' : '否');
          if (_dwxx.sjgqmc) {
            $('.sjdwInfo').text(_dwxx.sjgqmc).attr('title', _dwxx.sjgqmc);
          } else {
            $('.J_rightSjdw').hide();
          }
          // $('.sjdwInfo').text(_dwxx.sjgqmc ? _dwxx.sjgqmc : ''); //上级单位
          $('.lxdhInfo').text(_dwxx.lxrdh);
          $('.mc').attr('title', _dwxx.dwmc);
          $('.shxydm').text('统一社会信用代码: ' + _dwxx.zjhm);
          var gwFlag = _dwxx.sfwhxx;
          //
          $(document).on('click', '.J_gwAdd', function () {
            if (gwFlag != 1) {
              $.ownAlert('请维护单位基本信息！', '确定');
              return;
            }
            window.location.href = './gwxx.html';
          })
          // 是否一级单位，是无法修改
          if (_dwxx.sfyjgq == 1) {
            // $('.').attr('disabled', true);
          } else {
            // $('.').attr('disabled', false);
          }
        } else {
          $.ownAlert(data.message, '确定');
        }
      }
    );
  }
  getUserInfo();

  // 归档岗位信息
  $(document).on('click', '.Ck_btn', function () {
    window.location.href = "./gdList.html";
  });
  // 单位信息维护
  $(document).on('click', '.J_dont', function () {
    window.location.href = "./dwxx.html";
  });
})();
